package models.vo {

  	import com.axon.brasil.formatters.CpfFormatter;
  	
  	import helpers.Constants;
  	
  	import org.restfulx.collections.ModelsCollection;
  	import org.restfulx.models.RxModel;
  	
  	[Resource(name="users")]
  
  	[Bindable]
  	public class User extends RxModel {

    	public static const LABEL				:	String = "cpf";
    	
    	public static const ROLE_REPRESENTANTE	:	String = "representante";
    	public static const ROLE_ADMINISTRADOR	:	String = "admin";
    	public static const ROLE_CONFERENTE		:	String = "conferente";
    	public static const ROLE_DISTRIBUIDOR	:	String = "distribuidor";
    	public static const ROLE_ANALISTA		:	String = "analista";
    	public static const ROLE_CERTIFICADOR	:	String = "certificador";
    	public static const ROLE_RECOMENDADOR	:	String = "recomendador";
    	public static const ROLE_DELIBERADOR	:	String = "deliberador";

    	public var cpf							:	String = "";
    	public var name							:	String = "";
    	public var email						:	String = "";
    	public var rememberToken				:	String = "";

    	[DateTime]	public var rememberTokenExpiresAt	:	Date;
    	[DateTime]	public var activatedAt				:	Date;
    	[DateTime]	public var deletedAt				:	Date;

        [HasOne]
		public var informacoesUsuarios			:	InformacaoUsuario;
    
    	[Ignore]
    	public var rolesString					:	String = "";

    	[HasMany]
    	public var pleitos						:	ModelsCollection;
    
    	[HasMany]
    	public var tramitacoes					:	ModelsCollection;
    
		//////////////////////////////////////////////////////////////////////////////////////////////////////

    	public function User() {
      		super(LABEL);
		}
		
		//////////////////////////////////////////////////////////////////////////////////////////////////////

		public function hasRole(roleName: String): Boolean
		{
			return rolesString.split(";").indexOf(roleName) > -1;
		}

		//////////////////////////////////////////////////////////////////////////////////////////////////////

		public function nameAndLogin(): String
		{
			return (cpf == "") ? "" : (name + " (" + new CpfFormatter().format(cpf) + ")");	
		}
		
		//////////////////////////////////////////////////////////////////////////////////////////////////////

		public function ehAnalistaOuSuperior(): Boolean
		{
			return ( hasRole(ROLE_ANALISTA) || ehCertificadorOuSuperior() );
		}
		
		//////////////////////////////////////////////////////////////////////////////////////////////////////

		public function ehCertificadorOuSuperior(): Boolean
		{
			return ( hasRole(ROLE_CERTIFICADOR) || ehRecomendadorOuSuperior() );
		}
		
		//////////////////////////////////////////////////////////////////////////////////////////////////////

		public function ehRecomendadorOuSuperior(): Boolean
		{
			return ( hasRole(ROLE_RECOMENDADOR) || hasRole(ROLE_DELIBERADOR) );
		}
		
  	}
}
